package com.xsq.netty;

import android.content.Context;
import android.os.IBinder;

import com.google.gson.JsonObject;
import com.xsq.netty.channel.INettyChannelListener;

import java.io.IOException;

import io.netty.channel.Channel;

/**
 * Created by Shiquan.Xiao on 2023/2/24.
 */
public interface INettyClient {

    boolean init(Context context, NettyConfig config);
    /**
     * 初始化Bootstrap
     */
    void initBootstrap();
    /**
     * 创建连接线程池
     */
    void createConnectPool();

    /**
     * 连接服务器
     */
    void connect();

    /**
     * 发送消息
     */
    void sendMessage(JsonObject msg);

    void sendMessage(String msg);
    void setHeartbeatMsg(String msg);
    NettyConfig nettyConfig();
    /**
     * 获取当前连接通道
     */
    Channel getCurrentChannel();
    /**
     * 监听netty状态和消息
     */
    void setListener(INettyChannelListener listener);
    void addNettyListener(IBinder listener);
    void removeNettyListener(IBinder listener);

    /**
     * 关闭当前连接
     */
    void closeConnection();

    /**
     * 关闭所以tcp连接，释放资源
     */
    void release() throws IOException;

    /**
     * 关闭资源
     */
    void closeConnect();
    boolean isConnectServer();
    void setConnectServer(boolean connectServer);

    boolean isConnected();
    boolean haveConnection();
    /**
     * 是否释放资源
     */
    boolean isRelease();

    /**
     * 关闭Netty线程组
     */
    void shutdownLoopGroup();

    /**
     * 关闭连接线程池
     */
    void shutdownConnect();

}
